// 日志管理模块

let logContainer = null;
let requestResultTextarea = null;

/**
 * 初始化日志系统
 */
export function initLogger() {
    // 创建一个内部函数来尝试获取日志容器元素
    function tryInitializeLogger() {
        if (window.appDOM) {
            // 安全地设置日志容器，避免空引用错误
            logContainer = window.appDOM.logContainer || null;
            requestResultTextarea = window.appDOM.requestResultTextarea || null;
            
            // 如果找到日志容器，记录初始化成功
            if (logContainer) {
                // 使用console.log而不是log函数本身，避免循环调用
                console.log('日志系统已成功初始化');
                return true;
            } else {
                console.warn('警告：未找到日志容器元素，日志将只输出到控制台');
                return false;
            }
        } else {
            console.warn('appDOM尚未初始化，日志功能可能受限');
            return false;
        }
    }
    
    // 首先尝试立即初始化
    if (!tryInitializeLogger()) {
        // 如果立即初始化失败，设置延迟重试机制
        let retries = 3;
        const retryInterval = 200;
        
        const retryInitialize = setInterval(() => {
            if (tryInitializeLogger() || retries <= 0) {
                clearInterval(retryInitialize);
                
                // 如果重试次数用完仍然失败，记录最终警告
                if (retries <= 0) {
                    console.warn('警告：多次尝试初始化日志系统失败，日志将只输出到控制台');
                }
            }
            retries--;
        }, retryInterval);
    }
}

/**
 * 记录日志
 * @param {string} message - 日志消息
 * @param {string} level - 日志级别 (info, warn, error, debug)
 */
export function log(message, level = 'info') {
    // 如果没有logContainer，使用console
    if (!logContainer) {
        switch (level) {
            case 'error':
                console.error(message);
                break;
            case 'warn':
                console.warn(message);
                break;
            case 'debug':
                console.debug(message);
                break;
            default:
                console.info(message);
        }
        return;
    }
    
    const timestamp = new Date().toLocaleTimeString();
    const logEntry = document.createElement('div');
    logEntry.className = `log-entry log-${level}`;
    logEntry.innerHTML = `<span class="log-time">[${timestamp}]</span> <span class="log-message">${message}</span>`;
    
    logContainer.appendChild(logEntry);
    logContainer.scrollTop = logContainer.scrollHeight; // 自动滚动到底部
    
    // 如果日志条目过多，删除旧条目
    if (logContainer.children.length > 100) {
        logContainer.removeChild(logContainer.firstChild);
    }
}

/**
 * 清除日志
 */
export function clearLog() {
    if (logContainer) {
        logContainer.innerHTML = '';
    }
    
    if (requestResultTextarea) {
        requestResultTextarea.value = '';
    }
    
    log('日志已清除', 'info');
}

/**
 * 显示操作结果
 * @param {string} action - 操作名称
 * @param {any} result - 操作结果
 */
export function displayResult(action, result) {
    if (requestResultTextarea) {
        requestResultTextarea.value = JSON.stringify(result, null, 2);
    } else {
        log(`操作结果 [${action}]: ${JSON.stringify(result)}`, 'info');
    }
}

/**
 * 检查McpClient是否加载完成
 */
export function checkMcpClientLoaded() {
    if (typeof window.McpClient !== 'undefined') {
        log('McpClient 已成功加载', 'info');
        return true;
    } else {
        log('警告: McpClient 仍未加载，请检查client.js是否正确引入', 'warn');
        return false;
    }
}

/**
 * 注册日志自动刷新检查
 */
export function registerMcpClientCheck() {
    if (typeof window.McpClient === 'undefined') {
        log('警告: McpClient 尚未加载，请等待client.js加载完成', 'warn');
        setTimeout(() => {
            if (!checkMcpClientLoaded()) {
                setTimeout(() => {
                    checkMcpClientLoaded();
                }, 2000);
            }
        }, 1000);
    } else {
        log('McpClient 已成功加载', 'info');
    }
}